/**
 * 日志管理器 - 统一控制项目中的日志输出
 */
const fs = require('fs');
const path = require('path');

// 从环境变量读取日志级别，默认为 'info'
const LOG_LEVEL = process.env.VA_LOG_LEVEL || 'info';
const ENABLE_DEBUG_LOGS = process.env.VA_DEBUG === 'true';

// 日志级别定义
const LOG_LEVELS = {
    error: 0,
    warn: 1,
    info: 2,
    debug: 3
};

// 当前日志级别数值
const currentLogLevel = LOG_LEVELS[LOG_LEVEL] || LOG_LEVELS.info;

/**
 * 判断是否应该输出该级别的日志
 * @param {string} level - 日志级别
 * @returns {boolean} 是否应该输出
 */
function shouldLog(level) {
    return LOG_LEVELS[level] <= currentLogLevel;
}

/**
 * 日志输出函数
 * @param {string} level - 日志级别
 * @param {string} message - 日志消息
 * @param {any} data - 附加数据
 * @param {boolean} force - 是否强制输出（忽略级别控制）
 */
function log(level, message, data = null, force = false) {
    if (!force && !shouldLog(level) && !ENABLE_DEBUG_LOGS) {
        return;
    }

    const timestamp = new Date().toISOString();
    const prefix = `[${timestamp}] [${level.toUpperCase()}]`;

    switch (level) {
        case 'error':
            console.error(`${prefix} ${message}`, data || '');
            break;
        case 'warn':
            console.warn(`${prefix} ${message}`, data || '');
            break;
        case 'info':
            if (currentLogLevel >= LOG_LEVELS.info || force) {
                console.log(`${prefix} ${message}`, data || '');
            }
            break;
        case 'debug':
            if (currentLogLevel >= LOG_LEVELS.debug || ENABLE_DEBUG_LOGS) {
                console.log(`${prefix} ${message}`, data || '');
            }
            break;
        default:
            console.log(`${prefix} ${message}`, data || '');
    }
}

/**
 * 简化的日志函数
 */
const logger = {
    error: (message, data) => log('error', message, data, true), // 错误总是输出
    warn: (message, data) => log('warn', message, data),
    info: (message, data) => log('info', message, data),
    debug: (message, data) => log('debug', message, data),

    // 测试专用日志
    test: (message, data) => {
        if (process.env.NODE_ENV === 'test' && currentLogLevel >= LOG_LEVELS.info) {
            console.log(`🧪 [TEST] ${message}`, data || '');
        }
    },

    // 成功信息（绿色输出）
    success: (message, data) => {
        if (currentLogLevel >= LOG_LEVELS.info) {
            console.log(`✅ ${message}`, data || '');
        }
    },

    // 重要信息（强制输出）
    important: (message, data) => log('info', message, data, true)
};

/**
 * 创建带上下文的日志器
 * @param {string} context - 上下文标识
 * @returns {Object} 带上下文的日志器
 */
function createLogger(context) {
    return {
        error: (message, data) => logger.error(`[${context}] ${message}`, data),
        warn: (message, data) => logger.warn(`[${context}] ${message}`, data),
        info: (message, data) => logger.info(`[${context}] ${message}`, data),
        debug: (message, data) => logger.debug(`[${context}] ${message}`, data),
        test: (message, data) => logger.test(`[${context}] ${message}`, data),
        success: (message, data) => logger.success(`[${context}] ${message}`, data),
        important: (message, data) => logger.important(`[${context}] ${message}`, data)
    };
}

module.exports = {
    logger,
    createLogger,
    LOG_LEVELS,
    shouldLog,
    LOG_LEVEL
};